使用Filter过滤ip禁止访问系统 - 永恒の_☆ - 博客频道 - CSDN.NET

创建时间:2015/8/16 20:58
来源:http://blog.csdn.net/chenghui0317/article/details/9822981


使用Filter过滤ip禁止访问系统

2013-08-07 21:46 评论(3) 举报

在实际应用中,部署的项目如果收到恶意攻击,那么就需要将收到请求的ip过滤掉,现在以Filter过滤器为例讲解实现方式:

    1、自定义Filter过滤器,继承自javax.servlet.Filter 这个接口,实现它里面的三个方法;

    2、在init() 方法中接收配置的禁止访问的ip,以逗号分隔;

    3、在doFilter() 中进行业务处理,取出当前访问的ip 与系统中配置的ip匹配,如果存在则跳转到禁止访问的页面,如果没有就放行;

    4、在web.xml中配置该过滤器,指定拦截方式为所有请求,然后添加初始化参数指定禁止访问的ip。

具体代码如下:

  1. package com.chenghui.util;  
  2. import java.io.IOException;  
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.  * 定义IpFilter过滤器,过滤掉自己配置的ip列表禁止访问系统 
  12.  * ip列表在配置的filter中加入初始化参数即可。 
  13.  * @author Administrator 
  14. publicclass IpFilter implements Filter{  
  15.     String [] forbidIps = 
  16.     @Override
  17.     public destroy() {  
  18.         // TODO Auto-generated method stub
  19.     @Override
  20.     public doFilter(ServletRequest request, ServletResponse response,  
  21.             FilterChain filterChain) throws IOException, ServletException {  
  22.         //由于拦截器定义的拦截规范是/* ,所以所有的请求都会被拦截,为了防止死循环 开一个特例显示具体的访问结果
  23.         (((HttpServletRequest)request).getRequestURI().contains("forbid.jsp"
  24.             filterChain.doFilter(request, response);  
  25.             return//不加return 会继续执行请求。
  26.         String remoteAddr = request.getRemoteAddr();  
  27.         (forbidIps!=
  28.             ; i<forbidIps.length; i++) {  
  29.                 (forbidIps[i].equals(remoteAddr)){  
  30.                     //如果访问的ip与配置的ip相等 则直接过滤掉。
  31.                     ((HttpServletResponse)response).sendRedirect("forbid.jsp"
  32.                     return
  33.         filterChain.doFilter(request, response);  
  34.     @Override
  35.     public init(FilterConfig filterConfig) throws ServletException {  
  36.         //获取在web.xml中配置的<filter>的初始化参数
  37.         String initParamter = filterConfig.getInitParameter("forbidIps"
  38.         (initParamter != 
  39.             forbidIps = initParamter.split(
package com.chenghui.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 定义IpFilter过滤器,过滤掉自己配置的ip列表禁止访问系统
 * ip列表在配置的filter中加入初始化参数即可。
 * @author Administrator
 *
 */
public class IpFilter implements Filter{

	String [] forbidIps = null;
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		//由于拦截器定义的拦截规范是/* ,所以所有的请求都会被拦截,为了防止死循环 开一个特例显示具体的访问结果
		if(((HttpServletRequest)request).getRequestURI().contains("forbid.jsp")){
			filterChain.doFilter(request, response);
			return;//不加return 会继续执行请求。
		}
		
		String remoteAddr = request.getRemoteAddr();
		if(forbidIps!=null){
			for (int i=0; i<forbidIps.length; i++) {
				if(forbidIps[i].equals(remoteAddr)){
					//如果访问的ip与配置的ip相等 则直接过滤掉。
					((HttpServletResponse)response).sendRedirect("forbid.jsp");
					return;
				}
			}
		}
		filterChain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		//获取在web.xml中配置的<filter>的初始化参数
		String initParamter = filterConfig.getInitParameter("forbidIps");
		if(initParamter != null){
			forbidIps = initParamter.split(",");
		}
	}

}

web.xml中的配置如下:

  1. <!-- ip过滤器 -->
  2. filter
  3.     filter-nameipFilter</filter-name
  4.     filter-classcom.chenghui.util.IpFilter</filter-class
  5.     init-param
  6.         param-nameforbidIps</param-name
  7.         param-value192.168.1.108,192.168.6.89,192.168.6.99</param-value
  8.     </init-param
  9. </filter
  10. filter-mapping
  11.     filter-nameipFilter</filter-name
  12.     url-pattern</url-pattern
  13. </filter-mapping
  <!-- ip过滤器 -->
  <filter>
  	<filter-name>ipFilter</filter-name>
  	<filter-class>com.chenghui.util.IpFilter</filter-class>
  	<init-param>
  		<param-name>forbidIps</param-name>
  		<param-value>192.168.1.108,192.168.6.89,192.168.6.99</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>ipFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

好了,IpFilter过滤器定义完毕了,然后部署项目,在浏览器中运行试试看,效果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。